

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>BetterBatch Readme &mdash; BetterBatch v1.3.2 documentation</title>
    <link rel="stylesheet" href="_static/default.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '1.3.2',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <link rel="top" title="BetterBatch v1.3.2 documentation" href="index.html" />
    <link rel="next" title="The available built-in commands are:" href="built_in_commands.html" />
    <link rel="prev" title="Contents" href="index.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="built_in_commands.html" title="The available built-in commands are:"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="index.html" title="Contents"
             accesskey="P">previous</a> |</li>
        <li><a href="index.html">BetterBatch v1.3.2 documentation</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="betterbatch-readme">
<h1>BetterBatch Readme<a class="headerlink" href="#betterbatch-readme" title="Permalink to this headline">¶</a></h1>
<div class="section" id="what-is-betterbatch">
<h2>What is BetterBatch<a class="headerlink" href="#what-is-betterbatch" title="Permalink to this headline">¶</a></h2>
<p>BetterBatch is meant as a replacement for batch files. It has the following
advantages over batch files:</p>
<ul class="simple">
<li>easily include commands/variables from other files</li>
<li>set variables from the output of system commands</li>
<li>automatically checks the return value of executed commands</li>
<li>built-in commands to allow easy checking of conditions (e.g. that a file exists)</li>
<li>easier to read variable format</li>
<li>supports separation of code and configuration through includes</li>
<li>allow easily and safely using external scripts/executables</li>
</ul>
<p>BetterBatch&#8217;s sweet spot is for things that can be done by a batch command and
need to be maintained over time by different people who may not have the same
knowledge of scripting nor want the extra complexity of scripts (which can be
more difficult to maintain).</p>
<p>The following example checks if a file exists and if it doesn&#8217;t exist copy from
the filepath specified on the command line to that location.</p>
<p>First of all enter the following text into a new text file named &#8220;copyfile.bb&#8221;</p>
<div class="highlight-python"><pre>- set file_to_check=&lt;shell.temp&gt;\testing_betterbatch.txt

- if not exists &lt;file_to_check&gt;:
    - copy &lt;file_to_copy&gt; &lt;file_to_check&gt;</pre>
</div>
<p>Now execute it by running the following at the DOS prompt</p>
<div class="highlight-python"><pre>bbrun.py copyfile.bb file_to_copy=autoexec.bat</pre>
</div>
</div>
<div class="section" id="instalation">
<h2>Instalation<a class="headerlink" href="#instalation" title="Permalink to this headline">¶</a></h2>
<p>BetterBatch does not have to be installed as a Python Package, just download,
unzip and run bbrun.py.</p>
<p>Note - it does have a requirement on PyYAML (<a class="reference external" href="http://pyyaml.org/">http://pyyaml.org/</a>)
If you have Setuptools you can use the following command:</p>
<div class="highlight-python"><pre>easy_install -U pyyaml</pre>
</div>
<p>BetterBatch can also be installed as a Python module (if you want to import
and use BetterBatch functionality in python scripts). Use easy_install.py or your
favourite python package installation method.</p>
<p>If you want to associate the BetterBatch extension &#8221;.bb&#8221; with bbrun.py then you
can run:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">associate_bb_filetype</span><span class="o">.</span><span class="n">py</span>
</pre></div>
</div>
<p>This expects that python is on the path - but you can update it to your
python installation if python is not on the path.</p>
</div>
<div class="section" id="script-file-syntax">
<h2>Script File Syntax<a class="headerlink" href="#script-file-syntax" title="Permalink to this headline">¶</a></h2>
<div class="section" id="yaml">
<h3>YAML<a class="headerlink" href="#yaml" title="Permalink to this headline">¶</a></h3>
<p>Script files are based on YAML, but don&#8217;t worry too much about that!
Just be careful of the following rules:</p>
<blockquote>
<div><ul class="simple">
<li>Tab characters should be avoided (BetterBatch actually will replace them
and print a warning when it loads a file with tab characters)</li>
<li>Start each command with a &#8216;- &#8216;</li>
</ul>
</div></blockquote>
<p>Note - while a YAML parser is being used to parse the file, some things which
would fail if parsing as YAML directly will pass with betterbatch. This is
because pre-processing is done on the contents of the file before it is passed
to the YAML parser.</p>
</div>
<div class="section" id="statements">
<h3>Statements<a class="headerlink" href="#statements" title="Permalink to this headline">¶</a></h3>
<p>BetterBatch script files are made up of statements.</p>
<p>A simple statement starts with a dash (-), whitespace and then the command
to execute.</p>
<p>For example the typical first programming example - Hello World! - is:</p>
<div class="highlight-python"><pre>- echo Hello World!</pre>
</div>
</div>
<div class="section" id="command-statements">
<h3>Command Statements<a class="headerlink" href="#command-statements" title="Permalink to this headline">¶</a></h3>
<p>Unless a statement is one of the other types (see below) it is an Command
Statement</p>
<p>If the executable statement is not a <a class="reference external" href="built_in_commands.html">built-in command</a>
then it will be executed in the shell, just as if you typed it at the command
line.</p>
<p>Note - by default BetterBatch captures the output of the command
(output and error output) and adds it to the logfile (if set). It will
also by default stop execution of the script if the command returns an
error value (return code other than zero(0)). This behaviour can be modified
by qualifiers.</p>
<dl class="docutils">
<dt>The following qualifiers are available:</dt>
<dd><dl class="first last docutils">
<dt><strong>{*echo*}</strong> (or <strong>{*UI*}</strong> )</dt>
<dd>command output will be captured by BetterBatch. The output will also
go directly to the terminal. This is useful if the command requires
some interaction or you want to display the output as well as capture
to the log file.</dd>
<dt><strong>{*nocheck*}</strong></dt>
<dd>an error return value from the command will not cause the script to
terminate. A warning will be output in this case - but the script will
continue.</dd>
<dt><strong>{*nocapture*}</strong></dt>
<dd>do not capture the output to the log file. If <tt class="docutils literal"><span class="pre">{*echo*}</span></tt> qualifier is
also set the output will be shown to the user as it is generated.</dd>
<dt><strong>{*novalidate*}</strong></dt>
<dd>do not test that the command exists during the test phase. This is often
required if the path or the name of the tool will be defined by a
variable whose value will only be calculated during the execution phase.</dd>
</dl>
</dd>
</dl>
<p class="versionchanged">
<span class="versionmodified">Changed in version 1.2.0: </span>Added <tt class="docutils literal"><span class="pre">{*nocapture*}</span></tt> qualifier and made <tt class="docutils literal"><span class="pre">{*echo*}</span></tt> and <tt class="docutils literal"><span class="pre">{*ui*}</span></tt>
qualifiers the same.</p>
</div>
<div class="section" id="variable-definitions-statements">
<h3>Variable Definitions Statements<a class="headerlink" href="#variable-definitions-statements" title="Permalink to this headline">¶</a></h3>
<p>Example:</p>
<div class="highlight-python"><pre>- set variable_name = variable value</pre>
</div>
<p>Variable definitions can include other variables or executable sections. For
example:</p>
<div class="highlight-python"><pre>- set variable_name = The value of &lt;variable&gt; and output of {{{executable section}}}</pre>
</div>
<p>By default any variable you reference and any executable sections will be
executed when the variable definition is encountered in the script.
You can specify that variables and executable sections should not be replaced
until the variable is actually used by specifing the <tt class="docutils literal"><span class="pre">{*delayed*}</span></tt> qualifier for example:</p>
<div class="highlight-python"><pre>- set later_var = This &lt;variable&gt; and {{{executable section}}} will be replaced only when used {*delayed*}</pre>
</div>
<p>The <tt class="docutils literal"><span class="pre">{*hidden*}</span></tt> qualifier can be used on passwords and other sensitive data
so that it will not be put into the log file or output on the command line.
Please note that the support for this may not be complete - so you still need to
be careful with sensitive data.</p>
<p>If you need to include &#8216;&lt;&#8217; or &#8216;&gt;&#8217; characters in the variable value - you need to
escape them. This is done by doubling them.</p>
<dl class="docutils">
<dt>See Also</dt>
<dd><ul class="first last simple">
<li><a class="reference internal" href="#executable-sections"><em>Executable Sections</em></a> - more information on executable sections</li>
<li><a class="reference internal" href="#variable-references"><em>Variable References</em></a> - more information on referring to variables</li>
</ul>
</dd>
</dl>
</div>
<div class="section" id="include-statements">
<h3>Include statements<a class="headerlink" href="#include-statements" title="Permalink to this headline">¶</a></h3>
<p>Example:</p>
<div class="highlight-python"><pre>- echo Running your script</pre>
</div>
<p>The message will be output to the screen and to the log file.</p>
<p>You can optionaly provide the {<em>as_error</em>} or {<em>as_warning</em>} qualifiers to have
the text output as an error or warning respectively.</p>
</div>
<div class="section" id="id1">
<h3>Include statements<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
<p>Example:</p>
<div class="highlight-python"><pre>- include path\to\includefile.bb</pre>
</div>
<p>The steps in the file will be subsituted for the include statement as
if they were defined in the including file.</p>
<p>You can mark an include as optional by using the <tt class="docutils literal"><span class="pre">{*optional*}</span></tt> qualifier.</p>
<p>An include marked as optional will be used if it exists, but otherwise will
be ignored (a log file message will output if it was found or not).</p>
</div>
<div class="section" id="logfile-specification">
<h3>Logfile specification<a class="headerlink" href="#logfile-specification" title="Permalink to this headline">¶</a></h3>
<p>Example:</p>
<div class="highlight-python"><pre>- logfile path\to\logfile.bb</pre>
</div>
<p>If a previous logfile statement was given then that logfile will be closed
(if it can be) and all logging information will be written to the new logfile.</p>
</div>
<div class="section" id="if-statements">
<h3>If statements<a class="headerlink" href="#if-statements" title="Permalink to this headline">¶</a></h3>
<p>These statements allow you to branch based on conditions that you specify.</p>
<p>Example:</p>
<div class="highlight-python"><pre>- if exists required_files\file.abc:
  and exists required_files\file.zxy:
     - echo Great - both files exist
  else:
     - echo OH! - one of the files does not exist</pre>
</div>
<p>&#8220;and&#8221; or &#8220;or&#8221; can be used with the &#8220;if&#8221; part of the statement. You cannot
mix &#8220;and&#8221; and &#8220;or&#8221; in the same if statement (it should be consistently &#8220;or&#8221;
or consistently &#8220;and&#8221; in a single statement).</p>
<p>CAREFUL - the first letter of the <tt class="docutils literal"><span class="pre">if</span></tt>/<tt class="docutils literal"><span class="pre">and</span></tt>/<tt class="docutils literal"><span class="pre">or</span></tt>/<tt class="docutils literal"><span class="pre">else</span></tt> all have to
line up vertically - or the statement will not be parsed correctly.</p>
<p>For example the following will actually be wrong:</p>
<div class="highlight-python"><pre>- if not defined &lt;var&gt;:
 or not exists required_files\file.zxy:
     - end 1, Requirements not met - please fix
   else:
     - echo Lets continue then</pre>
</div>
<p>The <tt class="docutils literal"><span class="pre">or</span></tt> and the <tt class="docutils literal"><span class="pre">else</span></tt> are not lined up with the <tt class="docutils literal"><span class="pre">if</span></tt> statement.</p>
<p>The construct <tt class="docutils literal"><span class="pre">defined</span> <span class="pre">variable_name</span></tt> is a condition worth mentioning
in more detail e.g.</p>
<div class="highlight-python"><pre>- if defined build:
    - echo Value for build is &lt;build&gt;
  else:
    - end 1, The BUILD variable is not set - please specify a value</pre>
</div>
<p>This is the best way of using optional variables. (often passed on the command
line by passing <tt class="docutils literal"><span class="pre">var_name=var_value</span></tt>.</p>
</div>
<div class="section" id="for-statements">
<span id="for-statement"></span><h3>For statements<a class="headerlink" href="#for-statements" title="Permalink to this headline">¶</a></h3>
<p>For statements iterate over a list of items. Internally it uses uses the
newline character n to delimit the items. The <tt class="docutils literal"><span class="pre">split</span></tt> command can be easily
used to convert a list of values into the format required for the <tt class="docutils literal"><span class="pre">for</span></tt>
statement.</p>
<p>The format of the step is:</p>
<div class="highlight-python"><pre>- for LOOP_VARIABLE in INPUT:
    - exectute steps
    - which optionally using &lt;LOOP_VARIABLE&gt;</pre>
</div>
<p>The block of statements is executed once per line in the input, so for example
the general case of iterating over files in a directory that match a pattern:</p>
<div class="highlight-python"><pre>- for file in {{{dir &lt;__working_dir__&gt;/b *.txt}}}:
    - echo working on "&lt;file&gt;"
    - Curl - upload &lt;file&gt; to site..</pre>
</div>
<p>Another example could be the following:</p>
<div class="highlight-python"><pre>- set components = Server,Client,Database,Registry

# split the components variable on comma
- for component in {{{ split &lt;components&gt; {*,*} }}}:
    - echo working on Component "&lt;component&gt;"
    - Do work on &lt;component&gt;</pre>
</div>
<dl class="docutils">
<dt>See Also</dt>
<dd><ul class="first last simple">
<li><a class="reference internal" href="built_in_commands.html#split-built-in"><em>split</em></a> - The <tt class="docutils literal"><span class="pre">split</span></tt> built in</li>
</ul>
</dd>
</dl>
</div>
<div class="section" id="parallel-statements">
<h3>Parallel statements<a class="headerlink" href="#parallel-statements" title="Permalink to this headline">¶</a></h3>
<p>Many steps can often take quite a bit of time to complete, and you may want
other actions to start before it the long runnig step has finished.</p>
<p>Obviously these steps should not depend on each other.</p>
<p>One good example is downloading separate files, downloading can take quite a
while and you may want to start many downloading/uploading processes at the same
time.</p>
<p>In batch files you can acheive this by preceding the call to the tools with &#8220;start&#8221;
but then you will not be able to easily check return status nor retrieve the tool&#8217;s
output, etc.</p>
<p>In a BetterBatch script you can still use &#8220;Start&#8221; if you want - but much better is
to put the steps you want to execute in parallel in a &#8220;parallel&#8221; block:</p>
<div class="highlight-python"><pre>- parallel:
    - cUrl.exe big_file....
    - cUrl.exe another_big_file....
    - cUrl.exe and lots of small files 1
    - cUrl.exe and lots of small files 2
    - cUrl.exe etc</pre>
</div>
<p>As the order of execution of the items in the parallel section is not defined
you should never rely on one starting/finishing before another will start/finish.
Also ONLY command steps are allowed (i.e. no Variable Definitions, logfile, include,
for or if statements are allowed.</p>
</div>
<div class="section" id="function-definitions">
<h3>Function Definitions<a class="headerlink" href="#function-definitions" title="Permalink to this headline">¶</a></h3>
<p>You can define a function that you can call later at anytime. Here is a an
example:</p>
<div class="highlight-python"><pre>- function PrintArgs (arg1, arg2, arg3=123, arg4=This arg):
    - echo &lt;arg1&gt;, &lt;arg2&gt;, &lt;arg3&gt;, &lt;arg4&gt;</pre>
</div>
<p>In the above function definition the function name is <tt class="docutils literal"><span class="pre">PrintArgs</span></tt>, it takes
4 arguments <tt class="docutils literal"><span class="pre">arg1</span></tt>, <tt class="docutils literal"><span class="pre">arg2</span></tt>, <tt class="docutils literal"><span class="pre">arg3</span></tt> and <tt class="docutils literal"><span class="pre">arg4</span></tt>. Arguments <tt class="docutils literal"><span class="pre">arg3</span></tt> and
<tt class="docutils literal"><span class="pre">arg4</span></tt> have default arguments &#8220;123&#8221; and &#8220;This arg&#8221; respectively. The function
call will have to pass values for <tt class="docutils literal"><span class="pre">arg1</span></tt>, <tt class="docutils literal"><span class="pre">arg2</span></tt> but passing values for
arguments <tt class="docutils literal"><span class="pre">arg3</span></tt> and <tt class="docutils literal"><span class="pre">arg4</span></tt> is optional. If no option is passed then the
default values will be used.</p>
<p>The current implementation has no way to return a value - this will likely be
added at a later stage.</p>
</div>
<div class="section" id="function-calls">
<h3>Function Calls<a class="headerlink" href="#function-calls" title="Permalink to this headline">¶</a></h3>
<p>You can call functions in the following way:</p>
<div class="highlight-python"><pre>- call PrintArgs (here, there, arg4 = some value)</pre>
</div>
<p>Matching this against the example function defintion above
<tt class="docutils literal"><span class="pre">arg1</span></tt> will have value <tt class="docutils literal"><span class="pre">here</span></tt>,
<tt class="docutils literal"><span class="pre">arg2</span></tt> will have value <tt class="docutils literal"><span class="pre">there</span></tt>,
<tt class="docutils literal"><span class="pre">arg3</span></tt> will have value <tt class="docutils literal"><span class="pre">123</span></tt> (the default value),
<tt class="docutils literal"><span class="pre">arg4</span></tt> will have value <tt class="docutils literal"><span class="pre">some</span> <span class="pre">value</span></tt>.</p>
<p class="versionchanged">
<span class="versionmodified">Changed in version 1.2.0: </span>allowed function arguments to contain spaces.</p>
</div>
<div class="section" id="variable-references">
<span id="id2"></span><h3>Variable References<a class="headerlink" href="#variable-references" title="Permalink to this headline">¶</a></h3>
<p>You can reference any defined variable by using &lt;variable_reference&gt;.</p>
<p>The value of the variable will replace the variable reference.</p>
<p>If you need to have &lt; or &gt; in your script - then you double them. e.g.</p>
</div>
<div class="section" id="executable-sections">
<span id="id3"></span><h3>Executable Sections<a class="headerlink" href="#executable-sections" title="Permalink to this headline">¶</a></h3>
<p>Executable sections can be used in variable definition or executable
statements. The section will be replaced from the output from the section
after executing it.</p>
<p>Examples:</p>
<div class="highlight-python"><pre>- set file_contents = {{{type c:\autoexec.bat }}}
- echo {{{ replace &lt;file_contents&gt; {*a*} {*b*} }}}
- file_list {{{ dir c:\ /b }}}</pre>
</div>
<p>Executable sections can call any built-in command or external command.
Executable sections can reference variables</p>
</div>
<div class="section" id="special-variables">
<h3>Special Variables<a class="headerlink" href="#special-variables" title="Permalink to this headline">¶</a></h3>
<dl class="docutils">
<dt><strong>__script_dir__</strong></dt>
<dd>The directory where the script file is stored. Note - these values are
not changed for included scripts, included scripts use the same values
as the including scripts</dd>
<dt><strong>__script_filename__</strong></dt>
<dd>The filename of the script.</dd>
<dt><strong>__working_dir__</strong></dt>
<dd>The current directory when the script was executed.</dd>
</dl>
<p>For example if you runn the following command:</p>
<div class="highlight-python"><pre>c:\Program Files\betterbatch&gt; bbrun.py c:\MyProject\MakeBuild.bb</pre>
</div>
<p>then the values of the special variables will be:</p>
<div class="highlight-python"><pre>__script_dir__        c:\MyProject
__script_filename__   MakeBuild.bb
__working_dir__       c:\Program Files\betterbatch</pre>
</div>
<dl class="docutils">
<dt><strong>shell.*</strong></dt>
<dd><p class="first">Shell environment variables are pre-fixed with &#8216;shell.&#8217; to avoid conflicts
with any internal variables.</p>
<p class="last">For example if your script expects the user to pass a &#8216;buildnumber&#8217; value
to the script, but the environment has a &#8216;buildnumber&#8217; variable defined.
Without the pre-fix the environment variable would have been used silently
if no value was passed to the script. The shell prefix makes it clearer
that the BetterBatch script is going to use the environment value.</p>
</dd>
</dl>
</div>
</div>
<div class="section" id="troubleshooting">
<h2>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline">¶</a></h2>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
  <h3><a href="index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">BetterBatch Readme</a><ul>
<li><a class="reference internal" href="#what-is-betterbatch">What is BetterBatch</a></li>
<li><a class="reference internal" href="#instalation">Instalation</a></li>
<li><a class="reference internal" href="#script-file-syntax">Script File Syntax</a><ul>
<li><a class="reference internal" href="#yaml">YAML</a></li>
<li><a class="reference internal" href="#statements">Statements</a></li>
<li><a class="reference internal" href="#command-statements">Command Statements</a></li>
<li><a class="reference internal" href="#variable-definitions-statements">Variable Definitions Statements</a></li>
<li><a class="reference internal" href="#include-statements">Include statements</a></li>
<li><a class="reference internal" href="#id1">Include statements</a></li>
<li><a class="reference internal" href="#logfile-specification">Logfile specification</a></li>
<li><a class="reference internal" href="#if-statements">If statements</a></li>
<li><a class="reference internal" href="#for-statements">For statements</a></li>
<li><a class="reference internal" href="#parallel-statements">Parallel statements</a></li>
<li><a class="reference internal" href="#function-definitions">Function Definitions</a></li>
<li><a class="reference internal" href="#function-calls">Function Calls</a></li>
<li><a class="reference internal" href="#variable-references">Variable References</a></li>
<li><a class="reference internal" href="#executable-sections">Executable Sections</a></li>
<li><a class="reference internal" href="#special-variables">Special Variables</a></li>
</ul>
</li>
<li><a class="reference internal" href="#troubleshooting">Troubleshooting</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="index.html"
                        title="previous chapter">Contents</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="built_in_commands.html"
                        title="next chapter">The available built-in commands are:</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/readme.txt"
           rel="nofollow">Show Source</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" size="18" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="built_in_commands.html" title="The available built-in commands are:"
             >next</a> |</li>
        <li class="right" >
          <a href="index.html" title="Contents"
             >previous</a> |</li>
        <li><a href="index.html">BetterBatch v1.3.2 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2010, Mark Mc Mahon.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
    </div>
  </body>
</html>